ajax אג'קס
יש לי טופס עם אפשרות בחירת אזור בארץ, ואח"כ לבחור עיר מאותו אזור שבחרתי.
איך אני כותב את הקוד בשביל שישנה לי את תיבת הSELECT של העיר בהתאם לאזור שבחרתי?
בAJAX כמובן!
מה שעשיתי כרגע זה ONCLICK על תג הOPTION, הוא קורא לפונקציה ושולח לה את הID של האזור.
תודה מראש לעוזרים.
9 תשובות
לא הבנת אותי נכון, אולי ההסבר שלי לא היה מדויק.
התכוונתי לכך שברגע שאני בוחר אזור בארץ מתגית SELECT אחת, אז תגית SELECT אחרת משתנה.
לדוגמא, תגית הSELECT הראשונה:
<option value="1">צפון</option>
<option value="2">מרכז</option>
<option value="3">דרום</option>
</select>
לאחר בחירת אזור בארץ מהתג הנ"ל, התג הבא אמור להשתנות בהתאם.
לדוגמא, אם בחרתי את OPTION 2 מרכז, אז התג הבא יראה כך:
<option value="1">אזור דן</option>
<option value="2">ירושלים</option>
<option value="3">השרון</option>
...
..
.
</select>
כמובן שזה אמור להשתנות באג'קס.
אבל אני לא רוצה שהדף ירענן, וגם אני צריך את המשתנה של האזור שנבחר בשביל פונקציית הFOREACH ששואבת את כל האזורים המשניים לפי האזור הראשי שנבחר.
function changeSelect() {
var x=document.getElementById("mySelect").selectedIndex;
var y=document.getElementById("mySelect").options;
if (y[x].index==1) {
var lol=new Array("29299", "82929", "2929", "jffjd");
}
else if (y[x].index==2) {
var lol=new Array("223344555666", "ncnmjdfskjsdf", "32009832823489432", "383idjkdkls", "boringgg");
}
else {
var lol=new Array("33003w448", "484u4i4w4", "809320932823");
}
var a;
for (option in lol) {
var a += "<option>" + lol[option] + "</option>";
}
document.getElementById("myAnotherSelect").innerHTML=a;
}
</script>
<option>One</option> <!-- default -->
<option>Two</option>
<option>Three</option>
</select>
<select id="myAnotherSelect"> <!-- default for 'One' -->
<option>33003w448</option>
<option>484u4i4w4</option>
<option>809320932823</option>
</select>
HTML:
יצרתי שתי תיבות Select. בעת שינוי הערך הנבחר בתיבה הראשונה, מופעלת הפונקציה changeSelect() (ב-JS).
בתיבה הראשונה יש את הערכים "One", "Two", "Three".
מכיוון ש-"One" הוא הראשון, הוא זה שנבחר אוטומטית בעת טעינת הדף, ולכן הצגתי אחר-כך תיבת Select נוספת שמכילה את הערכים שהייתי רוצה שיוצגו כאשר הערך "One" נבחר.
זה הכל בקוד ה-HTML, ועכשיו עוברים לקוד ה-JS:
(אם אתה לא משתמש ב-HTML5 עליך להוסיף type מתאים לתגית script.)
למשתנה x הכנסתי את הערך שנבחר ב-Select הראשון, ולמשתנה y הכנסתי סוג של מערך של הערכים של אותו ה-Select.
מכיוון שב-Select הראשון ישנם שלושה ערכים, השתמשתי במבנה של if...else if...else בכדי לבצע פעולות שונות בכל פעם שנבחר ערך אחר.
במידה ונבחר הערך השני, "Two" (הספירה מתחילה מ-0, ולכן זה מסומן בתור 1), הוריתי ליצור מערך המכיל 4 מחרוזות: "29299", "82929", "2929" ו-"jffjd".
אני מניח שאתה יכול להבין לבד מה קורה אם נבחר הערך השלישי או ברירת המחדל (הראשון)...
לאחר מכן יצרתי לולאה שיוצרת מחרוזת המכילה תגי Option המכילים את איברי המערך שנוצר בדיוק לפני כן, ולבסוף הכנסתי אותה לתוך ה-Select השני.
הבעיה שלי בקוד הזה היא בעיקר עניין שילוב הPHP עם הJS, תמיד זה יצר לי בעיות.
אני הבנתי פחות או יותר את ההסבר שלך בדגש על הפחות, אבל איך אני משלב את SELECT הראשון עם הFOREACH של הSELECT השני.
ז"א, אין לי נתונים קבועים בתיבות הבחירה, כל הנתונים מגיעים מהDB בקוד PHP בFOREACH.
בתיבה הראשונה יש לי FOREACH שמוציא את כל האזורים ראשיים בארץ:
<option value="">בחר אזור</option>
<option value="" class="area_head">צפון</option>
<?php
foreach ($get_sec_areas_north as $key => $val){
echo '<option onclick="send_sec_area('.$val['sec_area_id'].')" value="'.$val['sec_area_id'].'">'.$val['sec_area_name'].'</option>';
}
echo'
<option value="" class="area_head">מרכז</option>';
foreach ($get_sec_areas_center as $key => $val){
echo '<option onclick="send_sec_area('.$val['sec_area_id'].')" value="'.$val['sec_area_id'].'">'.$val['sec_area_name'].'</option>';
}
echo'
<option value="" class="area_head">דרום</option>';
foreach ($get_sec_areas_south as $key => $val){
echo '<option onclick="send_sec_area('.$val['sec_area_id'].')" value="'.$val['sec_area_id'].'">'.$val['sec_area_name'].'</option>';
}
?>
</select>
ובתיבת בחירה השנייה יש FOREACH שאמור להראות את הערים באותו אזור שנבחר וזה עפ"י הID של האזור הראשי שנבחר בתיבת הבחירה הראשונה:
<option value="">בחר עיר/ישוב</option>
<?php
foreach ($get_all_city_rows_admin as $key => $val){
if($val['city_sec_area'] == $sec_area){
echo '<option value="'.$val['city_id'].'">'.$val['city_name'].'</option>';
}
}
?>
</select>
מקווה שהבנת אותי, ואני מצטער שאני מפגין בורות כזאת, אחרת לא הייתי מעלה את השאלה כאן.
זה בסדר, אנחנו פה כדי לנסות לעזור כמה שאפשר. :)
אם לא הבנת את הקוד שכתבתי (חוץ מהקטע של ה-.selectedIndex, .options וה-y[x].index, כי זה לא ממש ידוע עד שמתעסקים עם <select> וכאלה), אני ממליץ לך ללמוד JS ב-w3schools. זה מועבר שם בצורה מאוד פשוטה, ובתכלס - יש לך הרבה כבר מ-PHP. (כל זה אם אתה לא יודע JS)
על כל פנים, אתה מציג מהמסד את הנתונים ל-select הראשון, וב-select השני את הנתונים של ברירת המחדל של הראשון. אחר-כך אתה שם את שאר האפשרויות של ה-select השני בתוך תנאי ה-else if אחד-אחד.
אם לא הבנת נסה לקרוא שוב את הקוד עם ההסבר שכתבתי.